home *** CD-ROM | disk | FTP | other *** search
/ Personal Computer World 2007 September / PCWSEP07.iso / Software / Linux / Linux Mint 3.0 Light / LinuxMint-3.0-Light.iso / casper / filesystem.squashfs / var / lib / dpkg / info / linux-image-2.6.20-15-generic.preinst < prev    next >
Encoding:
Text File  |  2007-04-15  |  20.5 KB  |  587 lines

  1. #! /usr/bin/perl
  2. #                              -*- Mode: Cperl -*-
  3. # image.preinst ---
  4. # Author           : Manoj Srivastava ( srivasta@tiamat.datasync.com )
  5. # Created On       : Sun Jun 14 03:38:02 1998
  6. # Created On Node  : tiamat.datasync.com
  7. # Last Modified By : Manoj Srivastava
  8. # Last Modified On : Sun Sep 24 14:04:42 2006
  9. # Last Machine Used: glaurung.internal.golden-gryphon.com
  10. # Update Count     : 99
  11. # Status           : Unknown, Use with caution!
  12. # HISTORY          :
  13. # Description      :
  14. #
  15. #
  16.  
  17. #
  18. #use strict; #for debugging
  19.  
  20. use Debconf::Client::ConfModule qw(:all);
  21. version('2.0');
  22. my $capb=capb("backup");
  23.  
  24. $|=1;
  25.  
  26. # Predefined values:
  27. my $version         = "2.6.20-15-generic";
  28. my $link_in_boot    = "";     # Should be empty, mostly
  29. my $no_symlink      = "";     # Should be empty, mostly
  30. my $reverse_symlink = "";     # Should be empty, mostly
  31. my $do_symlink      = "Yes";    # target machine defined
  32. my $do_boot_enable  = "Yes";    # target machine defined
  33. my $do_bootfloppy   = "Yes";    # target machine defined
  34. my $do_bootloader   = "Yes";    # target machine defined
  35. my $move_image      = '';       # target machine defined
  36. my $mkimage         = "";     # command to generate the initrd image
  37. my $do_initrd       = '';       # target machine defined
  38. my $warn_initrd     = 'YES';    # target machine defined
  39. my $kimage          = "bzImage";     # Should be empty, mostly
  40. my $loader          = "lilo";     # lilo, silo, quik, palo, vmelilo, nettrom
  41.                                 # or elilo
  42. my $image_dir       = "/boot";     # where the image is located
  43. my $clobber_modules = '';       # target machine defined
  44. my $initrd          = "YES";     # initrd kernel
  45. my $use_hard_links  = '';       # hardlinks do not wirk across fs boundaries
  46. my $postinst_hook   = '';       #Normally we do not
  47. my $postrm_hook     = '';       #Normally we do not
  48. my $preinst_hook    = '';       #Normally we do not
  49. my $prerm_hook      = '';       #Normally we do not
  50. my $minimal_swap    = '';       # Do not swap symlinks
  51. my $ignore_depmod_err = '';    # normally we do not
  52. my $relink_src_link   = 'YES';    # There is no harm in checking the link
  53. my $relink_build_link = 'YES'; # There is no harm in checking the link
  54. my $force_build_link  = '';     # There is no harm in checking the link
  55. my $official_image    = "YES"; # only true for official images
  56. my $arch              = "i386";  #  should be same as dpkg --print-installation-architecture
  57. my $kernel_arch       = "i386";
  58. my $ramdisk           = "mkinitramfs-kpkg mkinitrd.yaird";  # List of tools to create initial ram fs.
  59. my $initrddep         = "initramfs-tools (>= 0.53) | yaird (>= 0.0.11) | linux-initramfs-tool, ";  # List of dependencies for such tools
  60. my $update_initramfs  = "/usr/sbin/update-initramfs";
  61. my $package_name    = "linux-image-$version";
  62.  
  63. $ramdisk = $update_initramfs if (-x $update_initramfs);
  64.  
  65. my $Loader          = "NoLOADER"; #
  66. $Loader             = "LILO"     if $loader =~ /^lilo/io;
  67. $Loader             = "SILO"     if $loader =~ /^silo/io;
  68. $Loader             = "QUIK"     if $loader =~ /^quik/io;
  69. $Loader             = "yaboot"   if $loader =~ /^yaboot/io;
  70. $Loader             = "PALO"     if $loader =~ /^palo/io;
  71. $Loader             = "NETTROM"  if $loader =~ /^nettrom/io;
  72. $Loader             = "VMELILO"  if $loader =~ /^vmelilo/io;
  73. $Loader             = "ZIPL"     if $loader =~ /^zipl/io;
  74. $Loader             = "ELILO"    if $loader =~ /^elilo/io;
  75.  
  76.  
  77. #known variables
  78. my @boilerplate     = ();
  79. my @silotemplate    = ();
  80. my @quiktemplate    = ();
  81. my @palotemplate    = ();
  82. my @vmelilotemplate = ();
  83. my $bootdevice      = '';
  84. my $rootdevice      = '';
  85. my $rootdisk        = '';
  86. my $rootpartition   = '';
  87. my $image_dest      = "/";
  88. my $realimageloc    = "/$image_dir/";
  89. my $have_conffile   = "";
  90. my $CONF_LOC        = '/etc/kernel-img.conf';
  91. my $relative_links  = '';
  92. my $silent_modules  = '';
  93. my $silent_loader   = '';
  94. my $warn_reboot     = '';        # Warn that we are installing a version of
  95.                                  # the kernel we are running
  96.  
  97. my $modules_base    = '/lib/modules';
  98.  
  99. die "Pre inst Internal error. Aborting." unless $version;
  100.  
  101. exit 0 if $ARGV[0] =~ /abort-upgrade/;
  102. exit 1 unless $ARGV[0] =~ /(install|upgrade)/;
  103.  
  104. # Official images may silently upgrade
  105. if ($official_image =~ /^\s*YES\s*$/o && ($ARGV[0] =~ /upgrade/)) {
  106.     $silent_modules = 'Yes';
  107.   }
  108.  
  109. # remove multiple leading slashes; make sure there is at least one.
  110. $realimageloc  =~ s|^/*|/|o;
  111. $realimageloc  =~ s|/+|/|o;
  112.  
  113. if (-r "$CONF_LOC" && -f "$CONF_LOC"  ) {
  114.   if (open(CONF, "$CONF_LOC")) {
  115.     while (<CONF>) {
  116.       chomp;
  117.       s/\#.*$//g;
  118.       next if /^\s*$/;
  119.  
  120.       $do_symlink      = "" if /do_symlinks\s*=\s*(no|false|0)\s*$/ig;
  121.       $no_symlink      = "" if /no_symlinks\s*=\s*(no|false|0)\s*$/ig;
  122.       $reverse_symlink = "" if /reverse_symlinks\s*=\s*(no|false|0)\s*$/ig;
  123.       $link_in_boot    = "" if /image_in_boot\s*=\s*(no|false|0)\s*$/ig;
  124.       $link_in_boot    = "" if /link_in_boot\s*=\s*(no|false|0)\s*$/ig;
  125.       $move_image      = "" if /move_image\s*=\s*(no|false|0)\s*$/ig;
  126.       $clobber_modules = '' if /clobber_modules\s*=\s*(no|false|0)\s*$/ig;
  127.       $do_boot_enable  = '' if /do_boot_enable\s*=\s*(no|false|0)\s*$/ig;
  128.       $do_bootfloppy   = '' if /do_bootfloppy\s*=\s*(no|false|0)\s*$/ig;
  129.       $do_bootloader   = '' if /do_bootloader\s*=\s*(no|false|0)\s*$/ig;
  130.       $do_initrd       = '' if /do_initrd\s*=\s*(no|false|0)\s*$/ig;
  131.       $warn_initrd     = '' if /warn_initrd\s*=\s*(no|false|0)\s*$/ig;
  132.       $relative_links  = '' if /relative_links \s*=\s*(no|false|0)\s*$/ig;
  133.       $use_hard_links  = '' if /use_hard_links\s*=\s*(no|false|0)\s*$/ig;
  134.       $silent_modules  = '' if /silent_modules\s*=\s*(no|false|0)\s*$/ig;
  135.       $silent_loader   = '' if /silent_loader\s*=\s*(no|false|0)\s*$/ig;
  136.       $warn_reboot     = '' if /warn_reboot\s*=\s*(no|false|0)\s*$/ig;
  137.       $minimal_swap    = '' if /minimal_swap\s*=\s*(no|false|0)\s*$/ig;
  138.       $ignore_depmod_err = '' if /ignore_depmod_err\s*=\s*(no|false|0)\s*$/ig;
  139.       $relink_src_link   = '' if /relink_src_link\s*=\s*(no|false|0)\s*$/ig;
  140.       $relink_build_link = '' if /relink_build_link\s*=\s*(no|false|0)\s*$/ig;
  141.       $force_build_link = '' if /force_build_link\s*=\s*(no|false|0)\s*$/ig;
  142.  
  143.       $do_symlink      = "Yes" if /do_symlinks\s*=\s*(yes|true|1)\s*$/ig;
  144.       $no_symlink      = "Yes" if /no_symlinks\s*=\s*(yes|true|1)\s*$/ig;
  145.       $reverse_symlink = "Yes" if /reverse_symlinks\s*=\s*(yes|true|1)\s*$/ig;
  146.       $link_in_boot    = "Yes" if /image_in_boot\s*=\s*(yes|true|1)\s*$/ig;
  147.       $link_in_boot    = "Yes" if /link_in_boot\s*=\s*(yes|true|1)\s*$/ig;
  148.       $move_image      = "Yes" if /move_image\s*=\s*(yes|true|1)\s*$/ig;
  149.       $clobber_modules = "Yes" if /clobber_modules\s*=\s*(yes|true|1)\s*$/ig;
  150.       $do_boot_enable  = "Yes" if /do_boot_enable\s*=\s*(yes|true|1)\s*$/ig;
  151.       $do_bootfloppy   = "Yes" if /do_bootfloppy\s*=\s*(yes|true|1)\s*$/ig;
  152.       $do_bootloader   = "Yes" if /do_bootloader\s*=\s*(yes|true|1)\s*$/ig;
  153.       $relative_links  = "Yes" if /relative_links\s*=\s*(yes|true|1)\s*$/ig;
  154.       $do_initrd       = "Yes" if /do_initrd\s*=\s*(yes|true|1)\s*$/ig;
  155.       $warn_initrd     = "Yes" if /warn_initrd\s*=\s*(yes|true|1)\s*$/ig;
  156.       $use_hard_links  = "Yes" if /use_hard_links\s*=\s*(yes|true|1)\s*$/ig;
  157.       $silent_modules  = 'Yes' if /silent_modules\s*=\s*(yes|true|1)\s*$/ig;
  158.       $silent_loader   = 'Yes' if /silent_loader\s*=\s*(yes|true|1)\s*$/ig;
  159.       $warn_reboot     = 'Yes' if /warn_reboot\s*=\s*(yes|true|1)\s*$/ig;
  160.       $minimal_swap    = 'Yes' if /minimal_swap\s*=\s*(yes|true|1)\s*$/ig;
  161.       $ignore_depmod_err = 'Yes' if /ignore_depmod_err\s*=\s*(yes|true|1)\s*$/ig;
  162.       $relink_src_link   = 'Yes' if /relink_src_link\s*=\s*(yes|true|1)\s*$/ig;
  163.       $relink_build_link = 'Yes' if /relink_build_link\s*=\s*(yes|true|1)\s*$/ig;
  164.       $force_build_link = 'Yes' if /force_build_link\s*=\s*(yes|true|1)\s*$/ig;
  165.  
  166.       $image_dest      = "$1"  if /image_dest\s*=\s*(\S+)/ig;
  167.       $postinst_hook   = "$1"  if /postinst_hook\s*=\s*(\S+)/ig;
  168.       $postrm_hook     = "$1"  if /postrm_hook\s*=\s*(\S+)/ig;
  169.       $preinst_hook    = "$1"  if /preinst_hook\s*=\s*(\S+)/ig;
  170.       $prerm_hook      = "$1"  if /prerm_hook\s*=\s*(\S+)/ig;
  171.       $mkimage         = "$1"  if /mkimage\s*=\s*(.+)$/ig;
  172.       $ramdisk         = "$1"  if /ramdisk\s*=\s*(.+)$/ig;
  173.     }
  174.     close CONF;
  175.     $have_conffile = "Yes";
  176.     $have_conffile = "Yes";    # stop perl complaining
  177.   }
  178. }
  179.  
  180. if ($do_initrd)    {   $warn_initrd = '';   }
  181. if (!$warn_initrd) {   $do_initrd   = "YES";}
  182.  
  183. $ENV{KERNEL_ARCH}=$kernel_arch if $kernel_arch;
  184.  
  185. # About to upgrade this package from version $2 TO THIS VERSION.
  186. # "prerm upgrade" has already been called for the old version of
  187. # this package.
  188.  
  189. sub find_initrd_tool {
  190.   my $hostversion = shift;
  191.   my $version = shift;
  192.   my @ramdisks =
  193.     grep {
  194.       my $args = 
  195.         "$_ " .
  196.           "--supported-host-version=$hostversion " .
  197.             "--supported-target-version=$version " .
  198.               "1>/dev/null 2>&1"
  199.                 ;
  200.       system($args) == 0;
  201.     }
  202.       split (/[:,\s]+/, $ramdisk);
  203. }
  204.  
  205. # For some versions of kernel-package, we had this warning in the
  206. # postinst, but the rules did not really interpolate the value in.
  207. # Here is a sanity check.
  208. my $pattern = "=" . "I";
  209. $initrd=~ s/^$pattern$//;
  210.  
  211. if ($initrd && $ramdisk ne $update_initramfs) {
  212.   chomp (my $hostversion = `uname -r`);
  213.   my @ramdisklist;
  214.   @ramdisklist = find_initrd_tool($hostversion, $version, $ramdisk) if $ramdisk;
  215.   if ($#ramdisklist < 0) {
  216.     my $ret;
  217.     my $seen;
  218.     my $text = "${package_name}/preinst/initrd-$version";
  219.     ($ret,$seen) = fset ("$text", 'seen', 'false');
  220.     die "Error setting debconf flags in $text: $seen" if $ret;
  221.  
  222.     ($ret,$seen) = subst("$text", 'hostversion', "$hostversion");
  223.     die "Error setting debconf substitutions in $text: $seen" if $ret;
  224.  
  225.     ($ret,$seen) = subst("$text", 'ramdisk', "$ramdisk");
  226.     die "Error setting debconf substitutions in $text: $seen" if $ret;
  227.  
  228.     ($ret,$seen) = subst("$text", 'initrddep', "$initrddep");
  229.     die "Error setting debconf substitutions in $text: $seen" if $ret;
  230.  
  231.     ($ret,$seen) = input('medium', "$text");
  232.     if ($ret && $ret != 30 ) {
  233.       die "Error setting debconf question $text: $seen";
  234.     }
  235.  
  236.     ($ret,$seen) = go ();
  237.     if ($ret && $ret != 30 ) {
  238.       die "Error asking debconf question $text: $seen";
  239.     }
  240.     # I no longer claim this question
  241.     ($ret,$seen) = unregister("$text");
  242.     die "Error unregistering debconf question $text: $seen" if $ret;
  243.     warn "Could not find $ramdisk.";
  244.   }
  245. }
  246.  
  247.  
  248. if ($initrd && !$do_initrd) {
  249.   my $ret;
  250.   my $seen;
  251.   my $answer;
  252.   my $invisible = 0;
  253.   my $question = "${package_name}/preinst/bootloader-initrd-$version";
  254.   if ($loader =~ m/^lilo/i) {
  255.     $question = "${package_name}/preinst/lilo-initrd-$version";
  256.   }
  257.   elsif ($loader =~ m/^elilo/i) {
  258.     $question = "${package_name}/preinst/elilo-initrd-$version";
  259.   }
  260.   ($ret,$seen) = fset ("$question", 'seen', 'false');
  261.   die "Error setting debconf flags in $question: $seen" if $ret;
  262.  
  263.   ($ret,$seen) = input('critical', "$question");
  264.   if ($ret && $ret != 30 ) {
  265.     die "Error setting debconf question $question: $seen";
  266.   }
  267.   $invisible = $ret if $ret == 30;
  268.  
  269.   ($ret,$seen) = go ();
  270.   if ($ret && $ret != 30 ) {
  271.     die "Error asking debconf question $question: $seen";
  272.   }
  273.  
  274.   ($ret,$answer) = get("$question");
  275.   die "Error retreiving answer for $question: $answer" if $ret;
  276.  
  277.   my $note = "${package_name}/preinst/lilo-has-ramdisk";
  278.   if (-f "/etc/lilo.conf"){
  279.     my $ramdisk_found = 0;
  280.     open (CONF, "/etc/lilo.conf")  or warn "Can't open /etc/lilo.conf: $!";
  281.     while (<CONF>) {
  282.       chomp;
  283.       if (m/^(\s*ramdisk\s*=\s*0)/g) {
  284.         my $line = $1;
  285.  
  286.         ($ret,$seen) = fset ("$note", 'seen', 'false');
  287.         die "Error setting debconf flags in $note: $seen" if $ret;
  288.  
  289.         $ret = subst("$note", 'LINE', "$line");
  290.         die "Error setting debconf substitutions in $note: $seen" if $ret;
  291.  
  292.         ($ret,$seen) = input('medium', "$note");
  293.         if ($ret && $ret != 30 ) {
  294.           die "Error setting debconf note $note: $seen";
  295.         }
  296.  
  297.         ($ret,$seen) = go ();
  298.         if ($ret && $ret != 30 ) {
  299.           die "Error asking debconf question $note: $seen";
  300.         }
  301.         last;
  302.       }
  303.     }
  304.     close CONF;
  305.   }
  306.   $answer =~ s/^\s+//;
  307.   $answer =~ s/\s+$//;
  308.   print STDERR "Ok, Aborting\n" unless $answer =~ /^(f|n)/i;
  309.   if ($answer !~ /^(f|n)/i && $invisible) {
  310.     my $note = "${package_name}/preinst/abort-install-$version";
  311.  
  312.     ($ret,$seen) = fset ("$note", 'seen', 'false');
  313.     die "Error setting debconf flags in $note: $seen" if $ret;
  314.  
  315.     ($ret,$seen) = fset ("$note", 'seen', 'false');
  316.     die "Error setting debconf flags in $note: $seen" if $ret;
  317.  
  318.     ($ret,$seen) = input('critical', "$note");
  319.     if ($ret && $ret != 30 ) {
  320.       die "Error setting debconf note $note: $seen";
  321.     }
  322.  
  323.     ($ret,$seen) = go ();
  324.     if ($ret && $ret != 30 ) {
  325.       die "Error asking debconf question $note: $seen";
  326.     }
  327.   }
  328.   exit 1 unless  $answer =~ /^(f|n)/i;
  329. }
  330.  
  331.  
  332. sub check {
  333.   my $version = shift;
  334.   my $lib_modules="$modules_base/$version";
  335.   my $message = '';
  336.  
  337.   if (-d "$lib_modules") {
  338.     opendir(DIR, $lib_modules) || die "canΓÇÖt opendir $lib_modules: $!";
  339.     my @children = readdir(DIR);
  340.     if ($#children > 1) {
  341.       my @dirs  = grep { -d "$lib_modules/$_" } @children;
  342.       if ($#dirs > 1) { # we have subdirs
  343.         my $dir_message='';
  344.         for my $dir (@dirs) {
  345.           if ($dir =~/kernel$/) {
  346.             $dir_message="An older install was detected.\n";
  347.           }
  348.           else {
  349.             $dir_message="Module sub-directories were detected.\n"
  350.               unless $dir_message;
  351.           }
  352.         }
  353.         $message += $dir_message if $dir_message;
  354.       }
  355.  
  356.       my @links = grep { -l "$lib_modules/$_" } @children;
  357.       if ($#links > -1) {
  358.         my $links_message = '';
  359.         for my $link (@links) {
  360.           next if ($link =~ /^build$/);
  361.           next if ($link =~ /^source$/);
  362.           $links_message = "Symbolic links were detected in $modules_base/$version.\n";
  363.         }
  364.         $message += $links_message if $links_message;
  365.       }
  366.       my @files = grep { -f "$lib_modules/$_" } @children;
  367.       $message += "Additional files also exist in $modules_base/$version.\n"
  368.         if ($#files > -1);
  369.     }
  370.   }
  371.   else { $message .= "$lib_modules does not exist. ";}
  372.   return $message;
  373. }
  374.  
  375. if (-d "$modules_base/$version") {
  376.   my $errors=check($version);
  377.   warn "Info:\n$errors\n" if $errors;
  378. }
  379.  
  380. # If this is an official image, and only a build symlink exists, allow
  381. # it to be clobbered.
  382. if ($official_image =~ /^\s*YES\s*$/o ) {
  383.   if (-d "$modules_base/$version" && -l "$modules_base/$version/build" ) {
  384.     rename("$modules_base/$version/build", "$modules_base/$version/build.save") ||
  385.       die "failed to move $modules_base/$version/build:$!";
  386.   }
  387. }
  388.  
  389. if (-d "$modules_base/$version/kernel") {
  390.   if ($clobber_modules) {
  391.     my $ret = 
  392.       system("mv $modules_base/$version/kernel $modules_base/${version}_kernel_$$");
  393.     my $seen;
  394.     if ($ret) {
  395.       my $note = "${package_name}/preinst/failed-to-move-modules-$version";
  396.  
  397.       ($ret,$seen) = fset ("$note", 'seen', 'false');
  398.       die "Error setting debconf flags in $note: $seen" if $ret;
  399.  
  400.       ($ret,$seen) = fset ("$note", 'seen', 'false');
  401.       die "Error setting debconf flags in $note: $seen" if $ret;
  402.  
  403.       $ret = subst("$note", 'modules_base', "$modules_base");
  404.       die "Error setting debconf substitutions in $note: $seen" if $ret;
  405.  
  406.       $ret = subst("$note", 'dest', "${version}/kernel_$$");
  407.       die "Error setting debconf substitutions in $note: $seen" if $ret;
  408.  
  409.       ($ret,$seen) = input('critical', "$note");
  410.       if ($ret && $ret != 30 ) {
  411.         die "Error setting debconf note $note: $seen";
  412.       }
  413.  
  414.       ($ret,$seen) = go ();
  415.       if ($ret && $ret != 30 ) {
  416.         die "Error asking debconf question $note: $seen";
  417.       }
  418.       exit 1;
  419.     }
  420.   }
  421.   elsif ($silent_modules !~ m/YES/i) {
  422.     my $ret;
  423.     my $seen;
  424.     my $answer;
  425.     my $question = "${package_name}/preinst/overwriting-modules-$version";
  426.  
  427.     ($ret,$seen) = fset ("$question", 'seen', 'false');
  428.     die "Error setting debconf flags in $question: $seen" if $ret;
  429.  
  430.     $ret = subst("$question", 'modules_base', "$modules_base");
  431.     die "Error setting debconf substitutions in $question: $seen" if $ret;
  432.  
  433.     $ret = subst("$question", 'package', "$package_name");
  434.     die "Error setting debconf substitutions in $question: $seen" if $ret;
  435.  
  436.     ($ret,$seen) = input('critical', "$question");
  437.     if ($ret && $ret != 30 ) {
  438.       die "Error setting debconf question $question: $seen";
  439.     }
  440.     $invisible = $ret if $ret == 30;
  441.  
  442.     ($ret,$seen) = go ();
  443.     if ($ret && $ret != 30 ) {
  444.       die "Error asking debconf question $question: $seen";
  445.     }
  446.  
  447.     ($ret,$answer) = get("$question");
  448.     die "Error retreiving answer for $question: $answer" if $ret;
  449.  
  450.     $answer =~ s/^\s+//;
  451.     $answer =~ s/\s+$//;
  452.     print STDERR "Ok, Aborting\n" unless $answer =~ /^(f|n)/i;
  453.     if ($answer !~ /^(f|n)/i && $invisible) {
  454.       my $note = "${package_name}/preinst/abort-overwrite-$version";
  455.  
  456.       ($ret,$seen) = fset ("$note", 'seen', 'false');
  457.       die "Error setting debconf flags in $note: $seen" if $ret;
  458.  
  459.       ($ret,$seen) = fset ("$note", 'seen', 'false');
  460.       die "Error setting debconf flags in $note: $seen" if $ret;
  461.  
  462.       ($ret,$seen) = input('critical', "$note");
  463.       if ($ret && $ret != 30 ) {
  464.         die "Error setting debconf note $note: $seen";
  465.       }
  466.  
  467.       ($ret,$seen) = go ();
  468.       if ($ret && $ret != 30 ) {
  469.         die "Error asking debconf question $note: $seen";
  470.       }
  471.     }
  472.     exit 1 unless  $answer =~ /^(f|n)/i;
  473.   }
  474.   else {
  475.     print STDERR <<EOF;
  476. The directory $modules_base/$version still exists. Continuing as directed.
  477. EOF
  478.   ;
  479.   }
  480. }
  481.  
  482. if ( -f "$modules_base/$version/modules.dep" && $warn_reboot) {
  483.   my $running = '';
  484.   chop($running=`uname -r`);
  485.   if ($running eq $version && $official_image !~ /^\s*YES\s*$/o) {
  486.     my $note = "${package_name}/preinst/already-running-this-$version";
  487.  
  488.     ($ret,$seen) = fset ("$note", 'seen', 'false');
  489.     die "Error setting debconf flags in $note: $seen" if $ret;
  490.  
  491.     ($ret,$seen) = fset ("$note", 'seen', 'false');
  492.     die "Error setting debconf flags in $note: $seen" if $ret;
  493.  
  494.     $ret = subst("$note", 'modules_base', "$modules_base");
  495.     die "Error setting debconf substitutions in $note: $seen" if $ret;
  496.  
  497.     $ret = subst("$note", 'running', "$running");
  498.     die "Error setting debconf substitutions in $note: $seen" if $ret;
  499.  
  500.     ($ret,$seen) = input('critical', "$note");
  501.     if ($ret && $ret != 30 ) {
  502.       die "Error setting debconf note $note: $seen";
  503.     }
  504.  
  505.     ($ret,$seen) = go ();
  506.     if ($ret && $ret != 30 ) {
  507.       die "Error asking debconf question $note: $seen";
  508.     }
  509.   }
  510. }
  511.  
  512. # set the env var stem
  513. $ENV{'STEM'} = "linux";
  514.  
  515. sub exec_script {
  516.   my $type   = shift;
  517.   my $script = shift;
  518.   print STDERR "Running $type hook script $script.\n";
  519.   system ("$script $version $realimageloc$kimage-$version") &&
  520.     print STDERR "User $type hook script [$script] ";
  521.   if ($?) {
  522.     if ($? == -1) {
  523.       print STDERR "failed to execute: $!\n";
  524.     }
  525.     elsif ($? & 127) {
  526.       printf STDERR "died with signal %d, %s coredump\n",
  527.         ($? & 127),  ($? & 128) ? 'with' : 'without';
  528.     }
  529.     else {
  530.       printf STDERR "exited with value %d\n", $? >> 8;
  531.     }
  532.     exit $? >> 8;
  533.   }
  534. }
  535. sub run_hook {
  536.   my $type   = shift;
  537.   my $script = shift;
  538.   if ($script =~ m,^/,) {
  539.     # Full path provided for the hook script
  540.     if (-x "$script") {
  541.       &exec_script($type,$script);
  542.     }
  543.     else {
  544.       die "The provided $type hook script [$script] could not be run.\n";
  545.     }
  546.   }
  547.   else {
  548.     # Look for it in a safe path
  549.     for my $path ('/bin', '/sbin', '/usr/bin', '/usr/sbin') {
  550.       if (-x "$path/$script") {
  551.         &exec_script($type, "$path/$script");
  552.         return 0;
  553.       }
  554.     }
  555.     # No luck
  556.     print STDERR "Could not find $type hook script [$script].\n";
  557.     die "Looked in: '/bin', '/sbin', '/usr/bin', '/usr/sbin'\n";
  558.   }
  559. }
  560.  
  561.  
  562. ## Run user hook script here, if any
  563. if (-x "$preinst_hook") {
  564.   &run_hook("preinst", $preinst_hook);
  565. }
  566. if (-d "/etc/kernel/preinst.d") {
  567.   print STDERR "Examining /etc/kernel/preinst.d/\n";
  568.   system ("run-parts --verbose --exit-on-error --arg=$version" .
  569.           " --arg=$realimageloc$kimage-$version" .
  570.           " /etc/kernel/preinst.d") &&
  571.             die "Failed to process /etc/kernel/preinst.d";
  572. }
  573. if (-d "/etc/kernel/preinst.d/$version") {
  574.   print STDERR "Examining /etc/kernel/preinst.d/$version.\n";
  575.   system ("run-parts --verbose --exit-on-error --arg=$version" .
  576.           " --arg=$realimageloc$kimage-$version" .
  577.           " /etc/kernel/preinst.d/$version") &&
  578.             die "Failed to process /etc/kernel/preinst.d/$version";
  579. }
  580. print STDERR "Done.\n";
  581.  
  582. exit 0;
  583.  
  584. __END__
  585.  
  586.  
  587.